home *** CD-ROM | disk | FTP | other *** search
/ Dynamic HTML Construction Kit / Dynamic HTML Construction Kit.iso / earthlink / nscomm / java40.jar / netscape / util / CompactInputStream.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  3.6 KB  |  332 lines

  1. package netscape.util;
  2.  
  3. import java.io.EOFException;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.UTFDataFormatException;
  7.  
  8. public class CompactInputStream extends InputStream {
  9.    static final int INVALID_BUFFER_COUNT = 8;
  10.    // $FF: renamed from: in java.io.InputStream
  11.    InputStream field_0;
  12.    int booleanCount = 8;
  13.    int booleanBuffer;
  14.    Vector stringVector = new Vector(128);
  15.  
  16.    public CompactInputStream(InputStream var1) {
  17.       this.field_0 = var1;
  18.    }
  19.  
  20.    public int read() throws IOException {
  21.       this.booleanCount = 8;
  22.       return this.field_0.read();
  23.    }
  24.  
  25.    public int read(byte[] var1) throws IOException {
  26.       this.booleanCount = 8;
  27.       return this.field_0.read(var1, 0, var1.length);
  28.    }
  29.  
  30.    public int read(byte[] var1, int var2, int var3) throws IOException {
  31.       this.booleanCount = 8;
  32.       return this.field_0.read(var1, var2, var3);
  33.    }
  34.  
  35.    public long skip(long var1) throws IOException {
  36.       if (var1 > 0L) {
  37.          this.booleanCount = 8;
  38.          return this.field_0.skip(var1);
  39.       } else {
  40.          return var1;
  41.       }
  42.    }
  43.  
  44.    public int available() throws IOException {
  45.       return this.field_0.available();
  46.    }
  47.  
  48.    public void close() throws IOException {
  49.       this.booleanCount = 8;
  50.       this.field_0.close();
  51.    }
  52.  
  53.    public void mark(int var1) {
  54.    }
  55.  
  56.    public void reset() throws IOException {
  57.       throw new IOException("mark/reset not supported");
  58.    }
  59.  
  60.    public boolean markSupported() {
  61.       return false;
  62.    }
  63.  
  64.    public void readFully(byte[] var1) throws IOException {
  65.       this.readFully(var1, 0, var1.length);
  66.    }
  67.  
  68.    public void readFully(byte[] var1, int var2, int var3) throws IOException {
  69.       this.booleanCount = 8;
  70.       InputStream var6 = this.field_0;
  71.  
  72.       int var5;
  73.       for(int var4 = 0; var4 < var3; var4 += var5) {
  74.          var5 = var6.read(var1, var2 + var4, var3 - var4);
  75.          if (var5 < 0) {
  76.             throw new EOFException();
  77.          }
  78.       }
  79.  
  80.    }
  81.  
  82.    public int skipBytes(int var1) throws IOException {
  83.       int var2;
  84.       for(var2 = var1; var1 > 0; var1 = (int)((long)var1 - this.skip((long)var1))) {
  85.       }
  86.  
  87.       return var2;
  88.    }
  89.  
  90.    public boolean readCompactBoolean() throws IOException {
  91.       int var2 = this.booleanBuffer;
  92.       int var3 = this.booleanCount;
  93.       if (var3 >= 8) {
  94.          var2 = this.field_0.read();
  95.          if (var2 < 0) {
  96.             throw new EOFException();
  97.          }
  98.  
  99.          var3 = 0;
  100.       }
  101.  
  102.       boolean var1 = (var2 & 1 << var3) != 0;
  103.       ++var3;
  104.       this.booleanBuffer = var2;
  105.       this.booleanCount = var3;
  106.       return var1;
  107.    }
  108.  
  109.    public boolean readBoolean() throws IOException {
  110.       this.booleanCount = 8;
  111.       int var1 = this.field_0.read();
  112.       if (var1 < 0) {
  113.          throw new EOFException();
  114.       } else {
  115.          return var1 != 0;
  116.       }
  117.    }
  118.  
  119.    public byte readByte() throws IOException {
  120.       this.booleanCount = 8;
  121.       int var1 = this.field_0.read();
  122.       if (var1 < 0) {
  123.          throw new EOFException();
  124.       } else {
  125.          return (byte)var1;
  126.       }
  127.    }
  128.  
  129.    public int readUnsignedByte() throws IOException {
  130.       this.booleanCount = 8;
  131.       int var1 = this.field_0.read();
  132.       if (var1 < 0) {
  133.          throw new EOFException();
  134.       } else {
  135.          return var1;
  136.       }
  137.    }
  138.  
  139.    public short readShort() throws IOException {
  140.       this.booleanCount = 8;
  141.       InputStream var1 = this.field_0;
  142.       int var2 = var1.read();
  143.       int var3 = var1.read();
  144.       if ((var2 | var3) < 0) {
  145.          throw new EOFException();
  146.       } else {
  147.          return (short)((var2 << 8) + var3);
  148.       }
  149.    }
  150.  
  151.    public int readUnsignedShort() throws IOException {
  152.       this.booleanCount = 8;
  153.       InputStream var1 = this.field_0;
  154.       int var2 = var1.read();
  155.       int var3 = var1.read();
  156.       if ((var2 | var3) < 0) {
  157.          throw new EOFException();
  158.       } else {
  159.          return (var2 << 8) + var3;
  160.       }
  161.    }
  162.  
  163.    public char readChar() throws IOException {
  164.       this.booleanCount = 8;
  165.       InputStream var1 = this.field_0;
  166.       int var2 = var1.read();
  167.       int var3 = var1.read();
  168.       if ((var2 | var3) < 0) {
  169.          throw new EOFException();
  170.       } else {
  171.          return (char)((var2 << 8) + var3);
  172.       }
  173.    }
  174.  
  175.    public int readCompactInt() throws IOException {
  176.       this.booleanCount = 8;
  177.       InputStream var1 = this.field_0;
  178.       int var2 = var1.read();
  179.       if (var2 < 0) {
  180.          throw new EOFException();
  181.       } else if (var2 == 64) {
  182.          return Integer.MIN_VALUE;
  183.       } else {
  184.          boolean var4 = (var2 & 64) != 0;
  185.          int var3 = var2 & 63;
  186.          if ((var2 & 128) != 0) {
  187.             var2 = var1.read();
  188.             if (var2 < 0) {
  189.                throw new EOFException();
  190.             }
  191.  
  192.             var3 |= (var2 & 127) << 6;
  193.             if ((var2 & 128) != 0) {
  194.                var2 = var1.read();
  195.                if (var2 < 0) {
  196.                   throw new EOFException();
  197.                }
  198.  
  199.                var3 |= (var2 & 127) << 13;
  200.                if ((var2 & 128) != 0) {
  201.                   var2 = var1.read();
  202.                   if (var2 < 0) {
  203.                      throw new EOFException();
  204.                   }
  205.  
  206.                   var3 |= (var2 & 127) << 20;
  207.                   if ((var2 & 128) != 0) {
  208.                      var2 = var1.read();
  209.                      if (var2 < 0) {
  210.                         throw new EOFException();
  211.                      }
  212.  
  213.                      var3 |= (var2 & 127) << 27;
  214.                   }
  215.                }
  216.             }
  217.          }
  218.  
  219.          if (var4) {
  220.             var3 = -var3;
  221.          }
  222.  
  223.          return var3;
  224.       }
  225.    }
  226.  
  227.    public int readInt() throws IOException {
  228.       this.booleanCount = 8;
  229.       InputStream var1 = this.field_0;
  230.       int var2 = var1.read();
  231.       int var3 = var1.read();
  232.       int var4 = var1.read();
  233.       int var5 = var1.read();
  234.       if ((var2 | var3 | var4 | var5) < 0) {
  235.          throw new EOFException();
  236.       } else {
  237.          return (var2 << 24) + (var3 << 16) + (var4 << 8) + var5;
  238.       }
  239.    }
  240.  
  241.    public long readLong() throws IOException {
  242.       return ((long)this.readInt() << 32) + ((long)this.readInt() & 4294967295L);
  243.    }
  244.  
  245.    public float readFloat() throws IOException {
  246.       return Float.intBitsToFloat(this.readInt());
  247.    }
  248.  
  249.    public double readDouble() throws IOException {
  250.       return Double.longBitsToDouble(this.readLong());
  251.    }
  252.  
  253.    public String readCompactUTF() throws IOException {
  254.       int var1 = this.readCompactInt();
  255.       if (var1 == 0) {
  256.          return null;
  257.       } else if (var1 == 1) {
  258.          return "";
  259.       } else if (var1 < 0) {
  260.          String var2 = this.readUTFBytes(-var1);
  261.          this.stringVector.addElement(var2);
  262.          return var2;
  263.       } else {
  264.          return (String)this.stringVector.elementAt(var1 - 2);
  265.       }
  266.    }
  267.  
  268.    public String readUTF() throws IOException {
  269.       int var1 = this.readUnsignedShort();
  270.       return var1 == 65535 ? null : this.readUTFBytes(var1);
  271.    }
  272.  
  273.    private final String readUTFBytes(int var1) throws IOException {
  274.       this.booleanCount = 8;
  275.       char[] var2 = new char[var1];
  276.       int var3 = 0;
  277.       int var4 = 0;
  278.  
  279.       while(var3 < var1) {
  280.          int var5 = this.readUnsignedByte();
  281.          switch (var5 >> 4) {
  282.             case 0:
  283.             case 1:
  284.             case 2:
  285.             case 3:
  286.             case 4:
  287.             case 5:
  288.             case 6:
  289.             case 7:
  290.                ++var3;
  291.                var2[var4++] = (char)var5;
  292.                break;
  293.             case 12:
  294.             case 13:
  295.                var3 += 2;
  296.                if (var3 > var1) {
  297.                   throw new UTFDataFormatException();
  298.                }
  299.  
  300.                int var10 = this.readUnsignedByte();
  301.                if ((var10 & 192) != 128) {
  302.                   throw new UTFDataFormatException();
  303.                }
  304.  
  305.                var2[var4++] = (char)((var5 & 31) << 6 | var10 & 63);
  306.                break;
  307.             case 14:
  308.                var3 += 3;
  309.                if (var3 > var1) {
  310.                   throw new UTFDataFormatException();
  311.                }
  312.  
  313.                int var6 = this.readUnsignedByte();
  314.                int var7 = this.readUnsignedByte();
  315.                if ((var6 & 192) != 128 || (var7 & 192) != 128) {
  316.                   throw new UTFDataFormatException();
  317.                }
  318.  
  319.                var2[var4++] = (char)((var5 & 15) << 12 | (var6 & 63) << 6 | var7 & 63);
  320.             case 8:
  321.             case 9:
  322.             case 10:
  323.             case 11:
  324.             default:
  325.                throw new UTFDataFormatException();
  326.          }
  327.       }
  328.  
  329.       return new String(var2, 0, var4);
  330.    }
  331. }
  332.